<?php
/*
	学生考试数据模型
*/
class exam_model extends WL_Model{
	public function __construct(){
		parent::__construct();
	}
	
	/**
	 * 通过学号查询学生
	 * @param $sid int 学号
	 * @return array/false
	 */
	public function get_user_by_sid( $sid ){

		return $this->db->get_where( 'student', array( 'sid'=>$sid ) )->row_array();
	}
	
	/**
	 * 通过班级号查班级信息
	 * @param int $cid 班级id
	 * @return array/false
	 * */
	public function get_class_by_cid( $cid ){
		
		return $this->db->get_where( 'class', array( 'cid'=>(int)$cid ) )->row_array();
	}
	
	/**
	 * 通过班级获取考场信息
	 * @param int $cid 班级id
	 * @return array/false
	 * */
	public function get_exam_by_cid( $cid ){
		
		return $this->db->get_where( 'exam', array( 'class'=>(int)$cid ) )->row_array();
	}
	
	/**
	 * 生成某个学生的试卷
	 * @param int sid 学号
	 * @return bool
	 * */
	public function init_test_paper( $sid ){
		
		$question = array();	//题目
		$done = array();	//已完成题目
		//循环抽取各难度题目，同时初始化已完成题目
		for( $i = 0; $i < $this->setting['level']; $i++ ){
			$question[ $i ] = $this->init_q_by_level( $i+1 );
			$done[ $i ] = 0;
		}
		
		$test_paper = [
						'sid'=>$sid,
						'select_time'=>date('Y-n-j H:i:s'),
						'question'=>implode(',', $question),
						'done'=>serialize( $done )	//序列化写入
					];
		return $this->db->replace( 'test_paper', $test_paper );
	}
	/**
	 * 根据考生学号查询考题
	 * @param int sid 学号
	 * @return array/false
	 * */
	public function get_test_paper_by_sid( $sid ){
		
		return $this->db->get_where( 'test_paper', array( 'sid'=>(int)$sid) )->row_array();
	}
	
	/**
	 * 查询某个难度的所有考题
	 * @param $level 0代表所有，1~4代表不同难度
	 * @return array/false
	 * */
	public function get_q_by_level( $level = 0 ){
		
		$level = (int)$level;
		if( $level == '0' ){
			return $this->get_field('question')->result();
		}else{
			return $this->db->get_where( 'question', array('level'=>$level) )->result_array();
		}
	}
	
	/**
	 * 按id查询考题
	 * @param $q_id 题目id
	 * @return array/false
	 * */
	public function get_q_by_id( $q_id ){
		
		return $this->db->get_where( 'question', array( 'id'=>$q_id ) )->row_array();
	}
	
	/**
	 * 随机抽取某个难度的题目
	 * @param $level 难度
	 * @return int 题目id
	 * */
	public function init_q_by_level( $level ){
		
		$level = (int)$level;
		$q = $this->get_q_by_level( $level );
		$id = rand( 0, count($q) - 1 );
		return $q[ $id ][ 'id' ];
	}
	
	/**
	 * 交卷
	 * @param $sid 交卷学生
	 * */
	public function handin( $sid ){
		return	$this->db->where( 'sid', (int)$sid )->update( 'test_paper', array( 'handin_time'=>date('Y-n-j H:i:s') ) );
	}
	
	/**
	 * 更新最近登录信息
	 * @param $sid int 学号
	 * @return bool
	 * */
	public function update_login_info( $sid ){
		
		$login_info = array();
		$login_info['ip'] = $this->input->ip_address();
		$login_info['login_time'] = date( 'Y-n-j H:i:s' );
		return $this->db->where( 'sid', $sid )->update( 'test_paper', $login_info );
	}
	
	/**
	 * 完成题目
	 * @param $p int 题目编号，0开始
	 * 
	 * */
	public function done_q( $p ){
		
		$test_paper = $this->get_test_paper_by_sid( sess( 'sid' ) );
		$done = unserialize( $test_paper['done'] );
		$done[ $p ] = 1;
		return $this->db->where( 'sid', sess('sid') )->update( 'test_paper', array( 'done'=>serialize($done) ) );
	}
}

